#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
struct edge
{
    int to,w;
    edge(int to,int w):to(to),w(w){}
};
vector<edge>e[maxn];
void link(int u,int v,int w)
{   e[u].push_back(edge(v,w)),e[v].push_back(edge(u,w)); }
int xor_sum,ans[maxn];
void dfs(int u,int f,int tag,int cur)
{
    ans[u]=cur;
    for(auto x:e[u])
    {
        int v=x.to,w=x.w;
        if(v==f)
            continue;
        dfs(v,u,tag^1,cur^w);
        if(tag) xor_sum^=w;
    }
}
int main()
{
    int t,n,u,v,w;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        xor_sum=0;
        for(int i=1;i<=n;i++)
            xor_sum^=i,e[i].clear();
        for(int i=1;i<n;i++)
            scanf("%d%d%d",&u,&v,&w),link(u,v,w);
        dfs(1,0,0,0);
        for(int i=1;i<=n;i++)
            printf("%d%c",ans[i]^xor_sum,i==n?'\n':' ');
    }
}